home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Floppyshop 2
/
Floppyshop - 2.zip
/
Floppyshop - 2.iso
/
art&graf.ix
/
art-6205
/
morphing
/
util
/
grille.lst
< prev
Wrap
File List
|
1996-08-09
|
3KB
|
132 lines
' **************************************
' ** Calcul de grille déformé
' ** GFA Basic
' **
' ** Valvassori Moïse 07.96
' **************************************
'
w=319 ! taille de la grille
h=199
c=20 ! nombre de ligne marge comprise
l=20
nom_grille$="GRILLE.GRD"
DIM gx%(c,l),gy%(c,l) ! grille d'arrivé
DIM gx1%(c,l),gy1%(c,l) ! grille de départ
init
trace
'
calcul
'
verif
trace
sauve
PROCEDURE calcul
' Une première méthode de calcul
LOCAL x,y
FOR x=0 TO c-1
FOR y=0 TO l-1
IF x<>0 AND x<>c-1 ! on déforme pas les bords
gx%(x,y)=gx%(x,y)+50*(COS(y*(1*PI)/l-1)*SIN(x*(2.5*PI)/(c-1)))
ENDIF
IF y<>0 AND y<>l-1 ! on déforme pas les bords
gy%(x,y)=gy%(x,y)+50*(COS(x*(3*PI)/(c-1))*SIN(y*PI/(l-1)))
ENDIF
NEXT y
NEXT x
RETURN
PROCEDURE calcul1
' Une seconde...
' Pour l'utiliser remplacer 'calcul' par 'calcul1'
LOCAL x,y,vx,vy,d,a,b,dm
a=w/2
b=h/2
dm=SQR(a^2+b^2)
FOR x=0 TO c-1
FOR y=0 TO l-1
vx=gx%(x,y)-a
vy=gy%(x,y)-b
d=SQR(vx^2+vy^2)
IF x<>0 AND x<>c-1 ! on déforme pas les bords
gx%(x,y)=a+vx*1.6*SIN((d/dm)*PI)
ENDIF
IF y<>0 AND y<>l-1 ! on déforme pas les bords
gy%(x,y)=b+vy*1*SIN(d/dm*PI)
ENDIF
NEXT y
NEXT x
RETURN
PROCEDURE init
LOCAL x,y
FOR x=0 TO c-1
FOR y=0 TO l-1
gx%(x,y)=(x*w/(c-1))+1 ! des grilles bien régulières
gy%(x,y)=y*h/(l-1)
gx1%(x,y)=(x*w/(c-1))+1 ! ()+1 au cause du bug du bord gauche
gy1%(x,y)=y*h/(l-1)
NEXT y
NEXT x
RETURN
PROCEDURE trace
' trace que la grille d'arrivé
LOCAL x,y
CLS
FOR x=0 TO c-1
FOR y=0 TO l-1
IF x<>c-1
COLOR (y MOD 15)+1
DRAW gx%(x,y),gy%(x,y) TO gx%(x+1,y),gy%(x+1,y)
ENDIF
IF y<>l-1
COLOR (x MOD 15)+1
DRAW gx%(x,y),gy%(x,y) TO gx%(x,y+1),gy%(x,y+1)
ENDIF
NEXT y
NEXT x
RETURN
PROCEDURE verif
' Vérifie si l'on est pas sortie du cadre
LOCAL x,y
FOR x=0 TO c-1
FOR y=0 TO l-1
IF gx%(x,y)<1 ! gère le bug du bord gauche de la grille
gx%(x,y)=1
ENDIF
IF gy%(x,y)<0
gy%(x,y)=0
ENDIF
IF gx%(x,y)>w+1 ! bug du bors gauche
gx%(x,y)=w+1
ENDIF
IF gy%(x,y)>h
gy%(x,y)=h
ENDIF
NEXT y
NEXT x
RETURN
PROCEDURE sauve
LOCAL x,y
OPEN "o",#1,nom_grille$ ! nom du fichier
' header
PRINT #1;"MORPHING GRID";CHR$(0); ! type de fichier
PRINT #1;MKI$(&H100); ! version 1.00
' GRILLE grid 0
PRINT #1;MKI$(c-1);MKI$(l-1);MKI$(gx1%(0,0));MKI$(gy1%(0,0)); ! nb de colone,nb de ligne, coin haut et gauche
PRINT #1;MKI$(gx1%(c-1,l-1));MKI$(gy1%(c-1,l-1));"dumy"; ! coin bas et droit, pointeur sur la grille (dummy)
' GRILLE grid 1
PRINT #1;MKI$(c-1);MKI$(l-1);MKI$(gx%(0,0));MKI$(gy%(0,0));
PRINT #1;MKI$(gx%(c-1,l-1));MKI$(gy%(c-1,l-1));"dumy";
' data grid 0
FOR y=0 TO l-1
FOR x=0 TO c-1
PRINT #1;MKI$(gx1%(x,y));MKI$(gy1%(x,y)); ! les données de la grille
NEXT x
NEXT y
' data grid 1
FOR y=0 TO l-1
FOR x=0 TO c-1
PRINT #1;MKI$(gx%(x,y));MKI$(gy%(x,y));
NEXT x
NEXT y
CLOSE #1
RETURN